In a computer infrastructure service, such as a cloud computing service, dynamically scalable resources are provided as services over the Internet. For example, a provider of a cloud computing service typically supplies a developer with computers on which the developer can run applications. The developer can then upload applications, libraries, data, and associated configuration settings to a storage repository and, using a Web services interface, the developer can request a number of resources (e.g., virtual machines), on which the developer can load the applications. The resources may provide a particular level of central processing unit (CPU) capacity. Furthermore, the developer may increase or decrease how much CPU and storage capacity is needed to run the applications.
The number of users of these kinds of services, such as cloud computing services, has increased at a rapid rate. Furthermore, these users are storing a greater number of objects and a wider variety of object types than ever before. As a consequence of this growth, classifying and identifying objects is a significant challenge for users and providers alike. For example, although objects are associated with identifiers, the identifiers do not provide any context as to what the objects are or how the objects are to be managed. To use the identifiers in any meaningful way to manage the objects, users would need to build automated management frameworks that are specific to their needs and objects. A user might need to build many management frameworks to access objects for desired purposes. However, it would be time consuming, expensive, and ultimately unrealistic to expect users to build large numbers of automated management frameworks.
It also would be time consuming and expensive for a provider to build automated management frameworks, because each user may have unique needs and may implement different policies to manage and classify objects. Furthermore, as providers add new services and users add new objects, the attributes of cloud object types have become more complex. As a consequence, it is virtually impossible for a provider to have sufficient knowledge of the type of objects that users have or how the users might wish the provider to assist in the management of the objects.
One way to facilitate interactions between users, providers, and objects is through the use of certain application programming interfaces (APIs), which providers make publically accessible to users. However, due to rapid growth of objects and the sheer magnitude of the different types of user objects, continuously updating these public APIs every time a new attribute, object, or service becomes available would be cumbersome for the provider and confusing to the users. Therefore, there is a need for improved systems and methods that address the above problems.